// 导入操作token方法
import { getToken, setToken, removeToken, setTimeStamp } from '@/utils/auth'
import { login, getInfo, getUserDetailById } from '@/api/user.js'
import { resetRouter } from '@/router'
export default {
  namespaced: true,
  state: () => {
    return {
      // 登录token
      token: getToken(),
      // 用户信息
      userInfo: {}
    }
  },
  mutations: {
    // 设置token事件
    setToken(state, token) {
      state.token = token
      // 保存本地
      setToken(token)
    },

    // 移除token事件
    removeToken(state) {
      state.token = null
      // 本地删除token
      removeToken()
    },

    // 设置用户信息
    setUserInfo(state, userInfo) {
      state.userInfo = userInfo
    },

    // 删除用户消息
    reomveUserInfo(state) {
      state.userInfo = {}
    }

  },
  actions: {
    // 请求登录事件
    async login(ctx, data) {
      // 调请求api
      const result = await login(data)
      // 保存token
      ctx.commit('setToken', result)
      // 保存token的时间戳
      setTimeStamp()
    },

    // 请求用户信息
    async getUserInfo(ctx) {
      const result = await getInfo()
      // 请求用户头像
      const baseInfo = await getUserDetailById(result.userId)
      // 整合信息
      const baseResult = { ...result, ...baseInfo }
      ctx.commit('setUserInfo', baseResult)
      return result // 返回方便后续动态路由使用
    },

    // 退出登录
    logout(ctx) {
      // 清掉token和用户信息
      ctx.commit('removeToken')
      ctx.commit('reomveUserInfo')
      // 重置路由,
      resetRouter()
      // 重置左侧导航栏数据
      // mutations(名称 载荷 {})第三个参数是配置项，设置为{root：true} 意思为调用根级Vuex actions 或 mutarions
      ctx.commit('permission/setRoutes', [], { root: true })
    }
  }
}
